// Example File command script to send sequence of DSI frames
// Uses HActive, VActive settings from the current frame timing settings

# FILE "../DSIDataTypes.txt"
# FILE "_DSI_SendFrame_Sub.txt"

////////////////////////////////////////////////////////////////////////////////////
// Subroutine definitions

# SUB SendPkt_RGB888 Line
	# i = 0
	# HS_PACKET_PLUS_CRC DT_RGB_888
	# LOOP_START SYS_HACTIVE
		(i&ffh) ((i+80)&ffh) ((i+160)&ffh)
		# i = i + 1
	# LOOP_END
# ENDSUB

# SUB SendPkt_RGB565 Line
	# HS_PACKET_PLUS_CRC DT_RGB_565
	# LOCAL r = Line & 1fh
	# LOCAL g = (2*Line) & 3fh
	# LOCAL bl = (3*Line) & 1fh
	# LOCAL rgb = r | (g << 5) | (bl << 11)
	*SYS_HACTIVE (rgb & ffh) (rgb >> 8)
# ENDSUB

# SUB SendPkt_YCbCr422_16 Line
	# HS_PACKET_PLUS_CRC DT_YCBCR_422_16BIT
	# IF ((Line & 8) == 0) 
		*SYS_HACTIVE 80h (Line & ffh)
	# ELSE
		*SYS_HACTIVE ((255 - Line) & ffh) 80h
	# ENDIF
# ENDSUB

# SUB SendPkt_RGB121212 Line
	# R = 0: # G = 0: # BL = 0
	# HS_PACKET_PLUS_CRC DT_RGB_121212
	# LOOP_START (SYS_HACTIVE / 2)
		(R&ffh)
		(((R>>8)&fh) | ((G&fh)<<4))
		((G>>4)&ffh)
		(BL&ffh)
		# tmp = BL
		# R = R + 8
		# G = G + 8
		# BL = BL + 8
		(((tmp>>8)&fh) | ((R&fh)<<4))
		((R>>4)&ffh)
		(G&ffh)
		(((G>>8)&fh) | ((BL&fh)<<4))
		((BL>>4)&ffh)
		# R = R + 8
		# G = G + 8
		# BL = BL + 8
	# LOOP_END
# ENDSUB

# SUB SendPkt_RGB888_ColorBars Line
	# HS_PACKET_PLUS_CRC DT_RGB_888
	# BAR = (7 * LINE - 1) / SYS_VACTIVE
	# IF (BAR == 0)
		*SYS_HACTIVE 255 0 0 
	# ENDIF
	# IF (BAR == 1)
		*SYS_HACTIVE 0 255 0
	# ENDIF
	# IF (BAR == 2)
		*SYS_HACTIVE 0 0 255
	# ENDIF
	# IF (BAR == 3)
		*SYS_HACTIVE 255 255 0
	# ENDIF
	# IF (BAR == 4)
		*SYS_HACTIVE 255 0 255
	# ENDIF
	# IF (BAR == 5)
		*SYS_HACTIVE 0 255 255
	# ENDIF
	# IF (BAR == 6)
		# i = 0
		# BARW = SYS_HACTIVE / 6
		# LAST_BARW = SYS_HACTIVE - (5 * BARW)
		*BARW 255 0 0 
		*BARW 0 255 0
		*BARW 0 0 255
		*BARW 255 255 0
		*BARW 255 0 255
		*LAST_BARW 0 255 255
	# ENDIF
# ENDSUB

// Assumes frame is stored in buffer FrameBuf and has data type FrameBufDataType
// Assume BitsPerPixel is set
# SUB SendPktFromBuffer Line
	# HS_PACKET_PLUS_CRC FrameBufDataType
	# LineLen = BitsPerPixel * SYS_HACTIVE / 8
	# STREAM FrameBuf ((Line-1)*LineLen) LineLen
# ENDSUB

////////////////////////////////////////////////////////////////////////////////////
// Send frame sequence

# CALL SendFrame "SendPkt_RGB565" 16
# CALL SendFrame "SendPkt_RGB888" 24
# CALL SendFrame "SendPkt_RGB888_ColorBars" 24
# CALL SendFrame "SendPkt_RGB121212" 36
# CALL SendFrame "SendPkt_YCbCr422_16" 16

// load BMP as RGB121212 into buffer (rescaling if necessary)
# FrameBufDataType = DT_RGB_121212
# LOAD_FRAME "../colors1280x720.bmp" FrameBuf FrameBufDataType SYS_HACTIVE SYS_VACTIVE
# CALL SendFrame "SendPktFromBuffer" 36

// build Ramp_3 test pattern frame (RGB101010 format) in FrameBuf
# FrameBufDataType = DT_RGB_101010
# LOAD_FRAME "RAMP_3" FrameBuf FrameBufDataType
# CALL SendFrame "SendPktFromBuffer" 30

// Build RGB888 pattern in buffer
// Save to binary file, then reload into FrameBuf
# BUF TestBuf
# i = 0
# LIMIT1 = SYS_VACTIVE/3
# LIMIT2 = 2*SYS_VACTIVE/3
# LOOP_START SYS_VACTIVE
	# IF (i < LIMIT1)
		*SYS_HACTIVE (i&ffh) 0 0
	# ELSE
		# IF (i < LIMIT2)
			*SYS_HACTIVE 0 ((i-LIMIT1)&ffh) 0
		# ELSE
			*SYS_HACTIVE 0 0 ((i-LIMIT2)&ffh)
		# ENDIF
	# ENDIF
	# i = (i + 1)
# LOOP_END
# SAVE_BUF TestBuf "TestFrame.bin"
# LOAD_BUF "TestFrame.bin" FrameBuf
# FrameBufDataType = DT_RGB_888
# CALL SendFrame "SendPktFromBuffer" 24




	







